#include "history.h"
#include "ui_history.h"
#include <QFile>
#include "qcustomplot.h"
History::History(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::History)
{
    ui->setupUi(this);

    QFile qss_file(":/qss/style/history.qss");
    if (qss_file.open(QFile::ReadOnly)) {
        QString qss_text = QLatin1String(qss_file.readAll());
        this->setStyleSheet(qss_text);
        qss_file.close();
    }

    // 初始化 QCustomPlot
        customPlot = new QCustomPlot(this);
        ui->verticalLayout_2->addWidget(customPlot); // 假设有一个垂直布局用来放置 QCustomPlot

    connect(ui->select,SIGNAL(clicked()),this,SLOT(sendJson()));

}

History::~History()
{
    delete ui;
}

void History::dataUpSlot(QByteArray jsonString)
{
    QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonString);

    if (!jsonDoc.isNull()) {
        QJsonObject jsonObj = jsonDoc.object();

        // 提取指令类型和结果
        if(jsonObj.contains("type"))
        {
           QJsonValue value = jsonObj.value("type");
           if(value != 4)
           {
               return;
           }
        }
        int type = jsonObj["type"].toInt();
        int result = jsonObj["result"].toInt();
        int key = jsonObj["key"].toInt();

        qDebug() << "Received Type:" << type;
        qDebug() << "Result:" << result;
        qDebug() << "Key:" << key;

        // 处理历史数据
        if (jsonObj.contains("data") && jsonObj["data"].isArray()) {
            QJsonArray dataArray = jsonObj["data"].toArray();

            // 清除之前的图表数据
            customPlot->clearGraphs();

            // 创建温度曲线（假设这是温度数据）
            QCPGraph *temperatureGraph = customPlot->addGraph();
            temperatureGraph->setPen(QPen(Qt::red)); // 温度曲线为红色
            temperatureGraph->setName("Temperature (°C)");

            QVector<double> timeData;
            QVector<double> temperatureData;

            // 解析数据数组
            for (const QJsonValue &value : dataArray) {
                QJsonObject dataObj = value.toObject();
                QString time = dataObj["time"].toString();
                QString val = dataObj["val"].toString();

                // 将时间转换为时间戳（以秒为单位）
                QDateTime dateTime = QDateTime::fromString(time, "yyyy-MM-dd HH:mm:ss");
                double timeValue = dateTime.toMSecsSinceEpoch() / 1000.0; // 转换为秒

                // 将温度值转换为 double
                double valValue = val.toDouble();

                // 打印接收到的历史数据
                qDebug() << "Time:" << time << "Value:" << val;

                // 添加数据到曲线
                timeData.append(timeValue);
                temperatureData.append(valValue);
            }



            // 将数据添加到曲线
            temperatureGraph->setData(timeData, temperatureData);

            // 设置坐标轴范围
            customPlot->xAxis->setLabel("Time");
            customPlot->yAxis->setLabel("Temperature (°C)");
            customPlot->xAxis->setRange(timeData.first(), timeData.last()); // 根据时间范围设置
            customPlot->yAxis->setRange(0, 100); // 根据实际值范围设置

            // 设置 x 轴为时间轴
            // 设置 x 轴为时间格式
            customPlot->xAxis->setTickLabelType(QCPAxis::ltDateTime);
            //customPlot->xAxis->setDateTimeFormat("%H:%M:%S"); // 设置时间格式为时:分:秒


            // 添加图例
            customPlot->legend->setVisible(true);
            customPlot->replot(); // 刷新图表

        } else {
            qDebug() << "No historical data found.";
        }
    } else {
        qDebug() << "Failed to parse JSON data.";
    }
}



//void History::dataUpSlot(QByteArray jsonString)
//{
//    QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonString);

//        if (!jsonDoc.isNull()) {
//            QJsonObject jsonObj = jsonDoc.object();

//            // 提取指令类型和结果
//            int type = jsonObj["type"].toInt();
//            int result = jsonObj["result"].toInt();
//            int key = jsonObj["key"].toInt();

//            qDebug() << "Received Type:" << type;
//            qDebug() << "Result:" << result;
//            qDebug() << "Key:" << key;

//            // 处理历史数据
//            if (jsonObj.contains("data") && jsonObj["data"].isArray()) {
//                QJsonArray dataArray = jsonObj["data"].toArray();
//                for (const QJsonValue &value : dataArray) {
//                    QJsonObject dataObj = value.toObject();
//                    QString time = dataObj["time"].toString();
//                    QString val = dataObj["val"].toString();

//                    // 打印接收到的历史数据
//                    qDebug() << "Time:" << time << "Value:" << val;
//                    // 这里可以进一步处理数据，比如更新 UI 或存储数据
//                }
//            } else {
//                qDebug() << "No historical data found.";
//            }
//        } else {
//            qDebug() << "Failed to parse JSON data.";
//        }
//}

void History::sendJson()
{
    //QComboBox *comboBox = qobject_cast<QComboBox*>(sender());
    QJsonObject jsonObj;
    jsonObj["type"] = 4; // 指令类型：4-历史数据请求

    QJsonObject dataObj;
    int key;
    if(ui->comboBox->currentText()=="室内温度"){
        key =301;
    }else if(ui->comboBox->currentText()=="室内湿度"){
        key =302;
    }else if(ui->comboBox->currentText()=="环境温度"){
        key =101;
    }else if(ui->comboBox->currentText()=="环境湿度"){
        key =102;
    }else if(ui->comboBox->currentText()=="光照强度"){
        key =103;
    }else if(ui->comboBox->currentText()=="土壤湿度"){
        key =104;
    }else if(ui->comboBox->currentText()=="CO2浓度"){
        key =105;
    }else if(ui->comboBox->currentText()=="O2浓度"){
        key =106;
    }
    dataObj["key"] = key; // 添加设备的键值到 data 对象

    jsonObj["data"] = dataObj; // 将 data 对象添加到顶层 JSON 对象

    // 生成 JSON 文档
    QJsonDocument jsonDoc;
    jsonDoc.setObject(jsonObj);
    QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Compact);

    // 发送消息
    emit sendmessage(jsonData);
    qDebug() << "Sending History Request JSON data:" << jsonData; // 输出以供调试
}
